package com.edt.ichannel.api.service;

import com.edt.ichannel.api.common.entity.ActionResult;

/**
 * 同步数据服务类
 *
 * @author 孙梁
 * 2018/2/1 16:22
 */
public interface SynDataService {
    /**
     * 同步组织机构
     */
    void synMechanismsInfo();

    /**
     * 同步人员
     */
    void synHrStaff();


    /**
     * 渠道发展订单数据同步
     */
    void synOrderIchannel(int day);

    /**
     * 月渠道发展订单数据同步
     */
    void synOrderIchannelMonth(int month);

    /**
     * 同步给定天数据 d05
     *
     * @param day 与当前时间相差天数
     */
    void synOrderIchannelDay(int day);


    /**
     * 渠道发展订单首充数据同步
     */
    @Deprecated
    void synFirstCharge(int day);

    /**
     * 计算发展奖
     *
     * @param batchCode 批次号
     * @author 孙梁
     * 2018/6/13 11:09
     */
    void computBonus(String batchCode);

    void computBonusSuperadd();


    /**
     * 同步对账信息
     *
     * @param accountNo 账户好
     * @param day       与今天相差天数 向前用 - 向后用 +
     */
    void synAccountCompare(String accountNo, int day, String batchCode);

    /**
     * 同步对账信息(所有账户)
     *
     * @param day 与今天相差天数 向前用 - 向后用 +
     */
    void synAccountCompare(int day);

    /**
     * 生成文件到临时目录
     *
     * @param method 方法名
     * @param day    与当前时间相差天数
     * @author 孙梁
     * 2018/6/11 11:46
     */
    void writOrderToTempPath(String method, int day, String dataStr);

    /**
     * 同步红包数据到sftp
     *
     * @param day 与当前时间相差天数
     * @author 孙梁
     * 2018/6/26 14:46
     */
    void synRedPackageOrder(int day);

    /**
     * 同步红包结果到系统
     *
     * @param day 与当前时间相差天数
     * @author 孙梁
     * 2018/6/26 14:46
     */
    void synRedPackageOrderResult(int day);

    /**
     * 计算红包发放数量
     *
     * @author 孙梁
     * 2018/6/28 16:05
     */
    void computRedpacketCount();

    /***
     * 之前的同步方法
     * @author 孙梁
     * 2018/7/12 9:34
     */
    @Deprecated
    void synMechanismsOld();

    @Deprecated
    void synStaffOld();


    /**
     * 根据时间字符串 查询特定人的订单
     *
     * @param dataStr yyyymmdd
     * @return com.edt.ichannel.api.common.entity.ActionResult
     * 同步结果
     * @author 孙梁
     * 2018/8/3 10:52
     */
    @Deprecated
    ActionResult synActivityStaff(String dataStr);

    /**
     * 月渠道发展订单数据同步 账期 格式 yyyymm
     */
    void synOrderIchannelMonthToKafKaFtp(String monthStr);

    /*** 查询所给天未首充数据，并调用接口查询首充信息
     * @param dayStr
     *             时间字符串
     * @author 孙梁
     * 2018/8/22 9:54
     */
    @Deprecated
    void synFirstMoneyCurrentDay(String dayStr);

    /*** 查询所有未首充数据，并调用接口查询首充信息
     * @author 孙梁
     * 2018/8/22 9:54
     */
    @Deprecated
    void synFirstMoneyAll();

    /**
     * 将首充数据 移动到ordercredit表中 用来计算佣金
     * 该方法需要在计算佣金和发展奖之前执行
     *
     * @author 孙梁
     * 2018/8/23 11:24
     */
    @Deprecated
    void moveFirstMoneyInfoToOrderCredit();

    /**
     * 读取kafka 回执文件，并入库
     *
     * @param monthStr 月份字符 yyyyMM，为空则读取所有没下载过的文件
     * @author 孙梁
     * 2018/9/14 9:59
     */
    void synMonthDataFromKafka(String monthStr);

    /**
     * 对比文件同步过来的数据和实时接口查询的数据 如果两边数据不一致则存错误表
     *
     * @author 孙梁
     * 2018/9/14 15:42
     */
    void compareKafkaDataAndSaveError();

    /**
     * 同步全量合伙人信息（有入参查询对应入参时间的数据）d06
     *
     * @param dataStr dataStr
     * @author 李爽
     * @date 2018/9/29 11:22
     */
    void synAllExpansion(String dataStr);


    /**
     * 查询成卡首充 并匹配规则计算佣金
     */
    void selectFirstMoneyCk();
    /**
     * 查询宽带首充 并匹配规则计算佣金
     */
    void selectFirstMoneyKd();

    /**
     * 将成卡数据移动到order_credit 用于计算发展奖和统计
     */
    void moveDataToOrderCreditCk();
    /**
     * 将宽带数据移动到order_credit 用于计算发展奖和统计
     */
    void moveDataToOrderCreditKd();

    /**
     * 将佣金发放至账户（成卡）
     */
    void putOutCommissionCK();
    /**
     * 将佣金发放至账户（宽带）
     */
    void putOutCommissionKd();

    /**
     * 读取联通支付回盘文件
     */
    void synUnicomPyaReq();

    /**
     * 批量读取回盘文件（暂时没有使用，根据给定文档开发，表示有接入能力，并未使用）
     */
    void synUnicomPyaReqBatch();
    /**
     * 批量读取回盘文件（暂时没有使用，根据给定文档开发，表示有接入能力，并未使用）
     */
    void synUnicomPyaReqBatchState();


    /**
     * 根据给定订单号查询首充计算佣金 自用功能
     * @param orderCode 订单号
     * @param type 类型（1 成卡 2 宽带）
     */
    void selectFirstMoneyByOrderCode(String orderCode, String type);
    /**
     * 根据给定订单号发放佣金 自用功能
     * @param orderCode 订单号
     * @param type 类型（1 成卡 2 宽带）
     */
    void putOutCommissionByOrderCode(String orderCode, String type);

    /**
     * 根据给定订单号移动数据 自用功能
     * @param orderCode 订单号
     * @param type 类型（1 成卡 2 宽带）
     */
    void moveDataToOrderCreditByOrderCode(String orderCode, String type);
    /**
     * 根据给定订单号计算发展奖 自用功能（以上方法有执行顺序，先查询，再发放，在移动，在计算发展奖）
     * @param orderCode 订单号
     */
    void computBounsMoneyByOrderCode(String orderCode);

    /**
     * 查询成卡首充 并匹配规则计算佣金 c流程
     */
    void selectFirstMoneyCkC();
    /**
     * 查询宽带首充 并匹配规则计算佣金 C流程
     */
    void selectFirstMoneyKdC();

    /**
     * 查询所有c流程成卡返回userId的数据并给统一销售平台推送业务号码等信息
     */
    void selectUserIdC();


    /**
     * 在网时长补发佣金计算
     */
    void computCommissionBf();
    /**
     * 在网时长补发佣金发放
     */
    void putoutCommissionBf();

    /**
     * 按月发放佣金计算
     */
    void computeCommissionMonth();

    /**
     * 按月发放佣金发放
     */
    void putoutCommissionMonth();

    /**
     * 手动调整佣金，首单，活动，达量等佣金发放
     */
    void putOutCommissionSuperadd();


    /**
     * 查询首单并计算佣金，存入补发表
     */
    void selectCommissionFirstOrder();

    /**
     * 查询达量 并计算佣金存入不发表
     * @param monthStr 月份信息
     */
    void selectCommissionArrive(String monthStr);
    /**
     * 推送数据给放心权益中心 D07
     *
     * @param day day
     * @author 李爽
     * @date 2019/1/25 10:55
     */
    void synOrderIchannelDayForFXQYZX(int day);

    /**
     * 根据订单号查询userid推送给违停
     * @param orderCode 订单号
     */
    void pushUseridByOrderCode(String orderCode);

    void testAsync();

}
